Skip to Content

理解网络数据包结构的核心在于一个概念:封装(Encapsulation)。数据在从高层向低层传递时,每一层都会给上一层传来的数据加上自己的“头部”(Header),有时也会加上“尾部”(Trailer),这个过程就像是把一封信(高层数据)装进一个信封(本层头部),再把这个信封放进一个更大的快递盒(更低层头部)里。

我们将以最常见的 TCP/IP 五层(或四层)模型 为例,自上而下地描述每一层的数据单元(PDU, Protocol Data Unit)及其结构。


概览:数据封装过程

为了方便理解,我们先用一个形象的文字嵌套结构来展示整个封装过程:

[ 帧头 [ IP头 [ TCP头 [ 应用层数据 ] ] ] 帧尾 ]
  • 应用层数据:最原始的数据,比如一个 HTTP 请求或一封邮件。
  • TCP头:传输层加上,用于标记源/目标端口号,确保数据传输的可靠性。
  • IP头:网络层加上,用于标记源/目标IP地址,负责在整个网络中寻址和路由。
  • 帧头/帧尾:数据链路层加上,用于标记源/目标MAC地址,负责在局域网内进行传输,并进行错误校验。

接下来,我们详细拆解每一层的结构。


1. 应用层 (Application Layer)

  • 数据单元名称报文 (Message)
  • 功能:为用户应用程序提供网络服务,如 HTTP、FTP、SMTP、DNS 等。
  • 数据结构:应用层的数据结构没有统一的标准,由具体的应用协议自行定义。通常可以看作是 “协议头部” + “数据体”

以 HTTP 请求为例:

[ HTTP 请求头部 ] [ HTTP 数据体 (可选) ]
  • HTTP 请求头部
    • 请求行:GET /index.html HTTP/1.1 (方法, URL, 协议版本)
    • 请求头:Host: www.example.com, User-Agent: Chrome/9..., Accept: text/html 等键值对。
  • HTTP 数据体:对于 GET 请求通常为空,对于 POST 请求则包含要提交的数据(如表单内容)。

对比:应用层是最贴近用户的层,其“包结构”是为了让应用程序之间能够相互理解,而不是为了网络传输。


2. 传输层 (Transport Layer)

  • 数据单元名称
    • 使用 TCP 协议时,称为 段 (Segment)
    • 使用 UDP 协议时,称为 数据报 (Datagram)
  • 功能:提供端到端(进程到进程)的通信。TCP 提供可靠、面向连接的服务;UDP 提供不可靠、无连接的服务。
  • 数据结构:在应用层报文的前面加上传输层头部。

2.1 TCP 段 (Segment) 结构

TCP 为了保证可靠性,头部结构非常复杂。

[ TCP 头部 ] [ 应用层报文 (Data) ]
  • TCP 头部 (20-60字节) 的关键字段
    • 源端口号 (Source Port, 16位):标识发送方应用程序。
    • 目的端口号 (Destination Port, 16位):标识接收方应用程序。
    • 序列号 (Sequence Number, 32位):用于对数据包进行排序,确保有序性。
    • 确认号 (Acknowledgement Number, 32位):期望收到的下一个字节的序列号,用于确认收到。
    • 头部长度 (Header Length, 4位):表示 TCP 头的长度。
    • 标志位 (Flags, 6位):如 SYN (建立连接), ACK (确认), FIN (断开连接), RST (重置连接) 等,是 TCP 状态机的核心。
    • 窗口大小 (Window Size, 16位):用于流量控制,告知对方自己还能接收多少数据。
    • 校验和 (Checksum, 16位):用于检查头部和数据部分在传输过程中是否出错。
    • 紧急指针 (Urgent Pointer, 16位):一个很少使用的字段。
    • 选项 (Options):可变长度,用于协商 MSS(最大报文段长度)等。

2.2 UDP 数据报 (Datagram) 结构

UDP 只负责“尽力而为”的传输,所以头部非常简单。

[ UDP 头部 ] [ 应用层报文 (Data) ]
  • UDP 头部 (固定8字节) 的关键字段
    • 源端口号 (Source Port, 16位)
    • 目的端口号 (Destination Port, 16位)
    • 长度 (Length, 16位):UDP 头部 + 数据的总长度。
    • 校验和 (Checksum, 16位):用于检查头部和数据部分是否出错(在IPv4中可选)。

对比:TCP 头部复杂,字段多,开销大(至少20字节),但能保证可靠性、顺序和流量控制。UDP 头部简单,开销小(固定8字节),速度快,但不可靠。


3. 网络层 (Internet Layer / Network Layer)

  • 数据单元名称数据报 (Datagram),通常也称为 包 (Packet)
  • 功能:负责将数据从源主机路由到目标主机。使用 IP 地址进行逻辑寻址。
  • 数据结构:在传输层数据段/数据报的前面加上 IP 头部。

以 IPv4 为例:

[ IPv4 头部 ] [ 传输层数据 (TCP Segment / UDP Datagram) ]
  • IPv4 头部 (20-60字节) 的关键字段
    • 版本 (Version, 4位):值为 4,表示 IPv4。
    • 头部长度 (IHL, 4位):表示 IP 头的长度。
    • 服务类型 (Type of Service, 8位):用于指定数据包的优先级。
    • 总长度 (Total Length, 16位):IP 头部 + 数据的总长度。
    • 标识 (Identification, 16位):唯一标识一个数据包,用于数据包分片后的重组。
    • 标志 (Flags, 3位) & 片偏移 (Fragment Offset, 13位):用于处理数据包的分片。
    • 生存时间 (Time to Live, TTL, 8位):数据包在网络中可通过的最多路由器数。每经过一个路由器减 1,为 0 则丢弃,防止数据包在网络中无限循环。
    • 协议 (Protocol, 8位):指明上层(传输层)使用的是什么协议。6 代表 TCP,17 代表 UDP。
    • 头部校验和 (Header Checksum, 16位):仅用于检查 IP 头部是否出错。
    • 源 IP 地址 (Source IP Address, 32位):发送方主机的 IP 地址。
    • 目的 IP 地址 (Destination IP Address, 32位):接收方主机的 IP 地址。
    • 选项 (Options):可变长度,如记录路由等。

对比:传输层关心的是端口号(哪个程序),而网络层关心的是 IP 地址(哪台主机)。TTL 和分片相关字段是网络层独有的,用于解决跨网络传输的问题。


  • 数据单元名称帧 (Frame)
  • 功能:负责在同一个物理网络(如一个局域网)内的节点之间传输数据。使用 MAC 地址进行物理寻址,并进行差错校验。
  • 数据结构:在网络层数据报的前面加上帧头,后面加上帧尾

以太网帧 (Ethernet Frame) 结构为例:

[ 帧头 (Header) ] [ 网络层数据报 (IP Datagram) ] [ 帧尾 (Trailer) ]
  • 帧头 (14字节)
    • 目的 MAC 地址 (Destination MAC, 6字节):接收方网卡的物理地址。
    • 源 MAC 地址 (Source MAC, 6字节):发送方网卡的物理地址。
    • 类型 (Type, 2字节):指明上层(网络层)的协议类型。0x0800 代表 IPv4,0x0806 代表 ARP。
  • 数据 (Payload)
    • 就是整个 IP 数据报。长度在 46 到 1500 字节之间。如果 IP 包太小,会进行填充。
  • 帧尾 (4字节)
    • 帧校验序列 (Frame Check Sequence, FCS, 4字节):使用 CRC 循环冗余校验,用于检查整个帧(从目的MAC到数据部分)在传输过程中是否出错。

对比:网络层使用 IP 地址进行全局逻辑寻址,可以跨越多个网络。而数据链路层使用 MAC 地址进行局部物理寻址,只在当前局域网内有效。当数据包从一个局域网传到另一个局域网时,IP 地址不变,但 MAC 地址会随着每一“跳”而改变。此外,数据链路层是唯一一个通常有尾部的层,用于差错校验。


5. 物理层 (Physical Layer)

  • 数据单元名称比特流 (Bit Stream)
  • 功能:负责在物理媒介(如网线、光纤、无线电波)上传输原始的二进制比特流。
  • 数据结构:没有“包”结构。它将数据链路层的帧转换为电信号(高低电压)、光信号(亮暗)或电磁波,然后发送出去。

表示0101101010001010111...


最终总结与对比

层次数据单元名称地址类型功能与头部关键信息封装表示
应用层报文 (Message)无 (由应用定义)定义通信规则 (如HTTP GET/POST),数据格式[应用数据]
传输层段(TCP)/数据报(UDP)端口号进程间通信。TCP:序列号/确认号(可靠性);UDP:简单快速[TCP/UDP头 [应用数据]]
网络层数据报 (Packet)IP地址主机间路由。TTL(防环路),协议号(区分TCP/UDP),分片信息[IP头 [传输层数据]]
数据链路层帧 (Frame)MAC地址局域网内节点间传输。类型(区分IP/ARP),FCS(差错校验)[帧头 [网络层数据] 帧尾]
物理层比特 (Bit)物理传输01010...

这个整理清晰地展示了每一层如何通过添加自己的控制信息(头部/尾部)来封装上层数据,从而协同工作,最终完成一次完整的网络通信。

Last updated on